package com.mxpio.erp.common.plm.service;

import com.mxpio.erp.common.plm.entity.*;
import com.mxpioframework.common.vo.Result;
import com.mxpioframework.jpa.query.Criteria;
import com.mxpioframework.system.service.BaseService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Map;

public interface ProjectInfoService extends BaseService<ProjectInfo> {

//    /**
//     * 不分页查询 （一个字段中可能含有多个值）
//     * @param criteria
//     * @return
//     */
//    List<ProjectInfo> list(Criteria criteria);

    /**
     * 分页查询 （一个字段中可能含有多个值）
     * @param page
     * @param criteria
     * @return
     */
    Page<ProjectInfo> listPage(Pageable page, Criteria criteria);

    /**
     * 终止项目
     * @param
     */
    Result<?> end(String key, String loginUsername, String businessKey, Map<String, Object> properties);

//    /**
//     * 立项
//     * @param projectInfo
//     */
//    void approval(ProjectInfo projectInfo);

    /**
     * 立项审核
     * @param
     */
//    Result<?> approvalOK(ProjectInfoApproval projectInfoApproval);
    Result<?> approvalOK(String key, String loginUsername, String businessKey, Map<String, Object> properties);

    /**
     * 立项审核结果
     * @param
     * @return
     */
    Result<?> approvalSuccess(ProjectInfo info);

    /**
     * 项目结项
     * @param
     */
    Result<?> complete(String key, String loginUsername, String businessKey, Map<String, Object> properties);

    /**
     * 变更项目
     * @param
     */
    Result<?> change(String key, String loginUsername, String businessKey, Map<String, Object> properties);

    /**
     * 变更项目审核
     * @param projectInfoChange
     */
    Result<?> changeOK(ProjectInfoChange projectInfoChange);

//    /**
//     * 计算项目进度
//     */
//    void calculateProgress();

    /**
     * 删除项目信息，删除项目时会同时删除交付物，任务，任务交付物，风险和问题
     * @param proCode
     */
    void deleteAll(String proCode);

    /**
     *  查询我负责的项目信息
     * @param page
     * @param criteria
     * @return
     */
    Page<ProjectInfo> listPageHead(Pageable page, Criteria criteria);

    /**
     * 查询我参与的项目信息
     * @param page
     * @param criteria
     * @return
     */
    Page<ProjectInfo> listPageJoin(Pageable page, Criteria criteria);

    Result<?> add(String templateCode);

    /**
     * 项目终止审批结束
     * @param projectInfoEnd
     * @return
     */
    Result<?> endOK(ProjectInfoEnd projectInfoEnd);

    /**
     * 项目结项-审批结束
     * @param projectInfoComplete
     * @return
     */
    Result<?> completeOK(ProjectInfoComplete projectInfoComplete);

    /**
     * 查询当前项目下任务各个状态的任务数量
     * @param proCode
     * @return
     */
    Result<?> getTaskNumber(String proCode);

    Result<?> getProgress(String proCode);

    Result<?> getProblemDistribution(String proCode);

    Result<?> getDangerDistribution(String proCode);

    Result<?> getPeople(String proCode);

    Result<?> getPeopleTime(String proCode);

    Result<?> getPeoplePosition(String proCode);

    Result<?> getChildDeliverable(String proCode, Pageable page, Criteria criteria);


//    /**
//     * 添加项目信息
//     * @param projectInfo
//     */
//    void savePro(ProjectInfo projectInfo);
//
//    /**
//     * 编辑项目信息
//     * @param projectInfo
//     */
//    void updatePro(ProjectInfo projectInfo);
}
